package com.evan.review.architecture.mvc.model;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;

/**
 * 待办事项数据库
 * MVC架构中的Model层，负责数据的存储和操作
 * 
 * 在实际应用中，这里应该使用Room、SQLite或网络API来实现数据持久化
 * 为了简化示例，这里使用内存存储
 */
public class TodoItemDatabase {
    private static TodoItemDatabase instance;
    private final Map<Long, TodoItem> todoItems;
    private final AtomicLong idCounter;
    
    private TodoItemDatabase() {
        todoItems = new HashMap<>();
        idCounter = new AtomicLong(0);
        
        // 添加一些示例数据
        addSampleData();
    }
    
    public static synchronized TodoItemDatabase getInstance() {
        if (instance == null) {
            instance = new TodoItemDatabase();
        }
        return instance;
    }
    
    private void addSampleData() {
        // 添加示例待办事项
        addTodoItem(new TodoItem(
                idCounter.incrementAndGet(),
                "完成MVC架构示例",
                "实现MVC架构的待办事项应用示例",
                false,
                System.currentTimeMillis() + 86400000, // 明天
                3 // 高优先级
        ));
        
        addTodoItem(new TodoItem(
                idCounter.incrementAndGet(),
                "学习MVP架构",
                "理解MVP架构的核心概念和实现方式",
                false,
                System.currentTimeMillis() + 172800000, // 后天
                2 // 中优先级
        ));
        
        addTodoItem(new TodoItem(
                idCounter.incrementAndGet(),
                "复习Android基础知识",
                "复习Activity生命周期、Fragment等基础知识",
                true,
                System.currentTimeMillis() - 86400000, // 昨天
                1 // 低优先级
        ));
    }
    
    /**
     * 获取所有待办事项
     */
    public List<TodoItem> getAllTodoItems() {
        return new ArrayList<>(todoItems.values());
    }
    
    /**
     * 根据ID获取待办事项
     */
    public TodoItem getTodoItemById(long id) {
        return todoItems.get(id);
    }
    
    /**
     * 添加待办事项
     */
    public TodoItem addTodoItem(TodoItem todoItem) {
        if (todoItem.getId() <= 0) {
            todoItem.setId(idCounter.incrementAndGet());
        }
        todoItems.put(todoItem.getId(), todoItem);
        return todoItem;
    }
    
    /**
     * 更新待办事项
     */
    public boolean updateTodoItem(TodoItem todoItem) {
        if (todoItems.containsKey(todoItem.getId())) {
            todoItems.put(todoItem.getId(), todoItem);
            return true;
        }
        return false;
    }
    
    /**
     * 删除待办事项
     */
    public boolean deleteTodoItem(long id) {
        return todoItems.remove(id) != null;
    }
    
    /**
     * 切换待办事项的完成状态
     */
    public boolean toggleTodoItemCompletion(long id) {
        TodoItem item = todoItems.get(id);
        if (item != null) {
            item.setCompleted(!item.isCompleted());
            return true;
        }
        return false;
    }
    
    /**
     * 获取未完成的待办事项数量
     */
    public int getIncompleteItemCount() {
        int count = 0;
        for (TodoItem item : todoItems.values()) {
            if (!item.isCompleted()) {
                count++;
            }
        }
        return count;
    }
} 